package com.itheima.app.controller;

import com.itheima.app.manager.UserManger;
import com.itheima.domain.db.User;
import com.itheima.domain.db.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Map;

@RestController
public class UserController {

    @Autowired  //使用spring的注入
    private UserManger userManger;

    /**
     * ResponseEntity : spring提供的一个工具类返回
     * 统一所有方法的返回值使用的
     *  返回是有成功 和 失败的
     *  返回成功的时候 有很多的类型  Long int 对象 void .....
     *
     *  ResponseEntity.ok(id)  返回值为200 响应  返回值为id
     *  ResponseEntity.status(状态码).body("状态码所提示的信息");
     *  ResponseEntity.status(401).body("权限不足");
     * @param user
     * @return
     */

    //保存用户
    /*@PostMapping("/user/save2")
    public ResponseEntity save2(@RequestBody User user){
        return ResponseEntity.ok(id);
    }*/

    //保存用户
   /* @PostMapping("/user/save")
    public Long save(@RequestBody User user){
        Long id = userManger.save(user);
        return id;
    }*/

    //根据手机号查询用户
   /* @GetMapping("/user/findByPhone")
    public User findByPhone(String phone){
        User user = userManger.findByPhone(phone);
        return user;
    }*/


    //保存
    @PostMapping("/user/save")
    public ResponseEntity save(@RequestBody User user){
        Long id = userManger.save(user);
        return ResponseEntity.ok(id);
    }
    //根据手机号查询用户
    @GetMapping("/user/findByPhone")
    public ResponseEntity findByPhone(String phone){
        User user = userManger.findByPhone(phone);
        return ResponseEntity.ok(user);
    }


    //发送短息验证码
    @PostMapping("/user/login")
    public ResponseEntity sendSmsLoginOrRegister(@RequestBody Map<String , String> map){
        String phone = map.get("phone");//获得传递的手机号
        userManger.sendSmsLoginOrRegister(phone);
        return ResponseEntity.ok(null);
    }


    //02 登录---验证码校验
    @PostMapping("/user/loginVerification")
    public ResponseEntity checkCode(@RequestBody Map<String , String> map){
        String phone = map.get("phone");//获得传递的手机号
        String verificationCode = map.get("verificationCode");//获得传递的手机号
        return userManger.loginOrRegister(phone , verificationCode); //登录或者注册
    }



    //保存用户的基本数据-03 首次登录---完善资料
    @PostMapping("/user/loginReginfo")
    public ResponseEntity saveUserInfo(@RequestBody UserInfo userInfo ,@RequestHeader("Authorization") String token){
        userManger.saveUserInfo(userInfo ,token);
        return ResponseEntity.ok(null); //不需要返回值
    }


    //04 首次登录---补充头像  不需要加入@RequestBody 因为请求方式不是json  普通的多部分表单上传 multipart/form-data
    @PostMapping({"/user/loginReginfo/head" , "/users/header"})
    public ResponseEntity updateUserInfoHead(MultipartFile headPhoto, @RequestHeader("Authorization") String token) throws IOException {
        userManger.updateUserInfoHead(headPhoto ,token);
        return ResponseEntity.ok(null); //不需要返回值
    }


    //用户资料 - 读取
    @GetMapping("/users")
    public ResponseEntity findUserInfoById( String userID , @RequestHeader("Authorization") String token) throws IOException {
        return userManger.findUserInfoById(userID,token);
    }


    //用户资料 -  修改
    @PutMapping("/users")
    public ResponseEntity updateUserInfo(@RequestBody UserInfo userInfo, @RequestHeader("Authorization") String token) throws IOException {
        return userManger.updateUserInfo(userInfo,token);
    }
}
